package es.ucm.fdi.lps.abadia.motor;
import java.util.ArrayList;
import java.util.List;
/**
 * Esta clase representa a una casilla del tablero de juego
 * @author Alberto Moreno y Gabriel Voicila
 *
 */


public class Casilla {

	/**
	 * Identificador num�rico de cada casilla
	 */
	int idCasilla;
	
	/** 
	 * Cadena que da nombre a la casilla
	 */
	String nombreCasilla;
	
	/** 
	 * Listado de jugadores que se encuentran en la casilla
	 */
	List<Jugador> listaJugadores;

	
	/**
	 * Constructor parametrizado	
	 */
	Casilla(String nombreCasilla, int idCasilla)
	{
		listaJugadores= new ArrayList<Jugador>();
		this.nombreCasilla= nombreCasilla;
		this.idCasilla= idCasilla;
	}
	
	/**
	 * Devuelve el identificador de la casilla
	 * @return idCasilla
	 */
	public int dameIdCasilla()
	{
		return idCasilla;
	}
	
	/**
	 * Devuelve el nombre de la casilla
	 * @return nombreCasilla
	 */
	public String dameNombreCasilla()
	{
		return nombreCasilla;
	}
	

	/**
	 * Devuelve la lista de jugadores localizados en una casilla
	 * @return listaJugadores
	 */
	public List<Jugador> dameListaJugadores() 
	{
		return listaJugadores;
	}
	
	/**
	 * Cambia el identificador de la casilla
	 * @param idCasilla
	 */
	public void cambiaIdCasilla(int idCasilla)
	{
		this.idCasilla= idCasilla;
	}
	
	/**
	 * A�ade un jugador a la lista de jugadores localizados en la casilla
	 * @param j
	 * @return
	 */
	public boolean añadeJugador(Jugador j)
	{
		if (listaJugadores.add(j)) return true;
		else return false;
	}
	
	/** 
	 * Quita el jugador j del listado de jugadores localizados en la casilla
	 * @param j
	 * @return booleano, indicando si se produjo o no la eliminaci�n
	 */
	public boolean quitaJugador(Jugador j)
	{
	   if (listaJugadores.remove(j)) return true;
	   else return false;
	}

	/**
	 * Devuelve una cadena con el nombre de la estancia y los jugadores que se 
	 * encuentran en la misma 
	 */
	public String toString()
	{
		return "Estancia: " + nombreCasilla+ "\n" + jugadoresEnEstancia();  	
	}
	
	/**
	 * Indica si hay jugadores en la estancia
	 * @return booleano que indica si hay jugadores o no en la estancia
	 */
	public boolean hayJugadores(){
		return listaJugadores.size()!=1;
	}
	
	
	/**
	 * Devuelve una cadena con los jugadores que se encuentran en una estancia
	 * @return cadena
	 */
	public String jugadoresEnEstancia(){
		String cadena="";
		if (listaJugadores.size()== 1) return "No hay otros monjes en la estancia";
		else
		{
			cadena+= "Lista de Jugadores aqui:";
			for (Jugador j: listaJugadores){
				cadena += j.dameNombreJugador() + ", ";
			}
		}
		return cadena;
	}
  
} // Fin Casilla
